package main


import (
	"fmt"
	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

type User struct {
	gorm.Model
	Name string
	Age int64
	Active bool
}


func main(){
	// 连接数据库
	db, err := gorm.Open("mysql", "root:root@(127.0.0.1)/db1?charset=utf8mb4&parseTime=True&loc=Local")
	if err != nil {
		panic(err)
	}

	defer db.Close()

	// 2.把模型与数据库中的表对应起来
	db.AutoMigrate(&User{})

	// 3.创建
	//u1 := User{Name: "tansi", Age: 18, Active: true}
	//db.Debug().Create(&u1)
	//u2 := User{Name: "xiaowangzi", Age: 20, Active: false}
	//db.Create(&u2)

	// 查询
	var user User
	db.Find(&user)
	fmt.Println(user)

	// 更新
	user.Name = "ok"
	user.Age = 19
	db.Debug().Save(&user)	// 默认会修改所有字段

	db.Debug().Model(&user).Update("name", "xiaoxiao")

	//m1 := map[string]interface{}{
	//	"name": "tansi",
	//	"age": 22,
	//	"active": true,
	//}
	//db.Model(&user).Updates(m1)	// m1列出的所有字段都会更新
	//db.Debug().Model(&user).Select("age").Update(m1)	// 只更新age字段
	//db.Debug().Model(&user).Omit("active").Update(m1) 	// 排除m1中的active更新其他的字段

	//db.Debug().Model(&user).UpdateColumn("age", 30)

	//rowsNum := db.Model(User{}).Updates(User{Name: "hello", Age: 18}).RowsAffected
	//fmt.Println(rowsNum)

	// 让users表中所有的用户的年龄在原来的基础上+2
	db.Model(&User{}).Update("age", gorm.Expr("age+?", 2))
}
